package br.com.imob.dao;

import br.com.imob.modelo.Plano;

import java.util.List;

/** @user Gilton Nascimento
 *  @since 10:23:04 01/02/2011 2011
 *  @version 
 */

public class PlanoDao extends GenericDao {
	
	public PlanoDao() {  }
	
	public Integer adicionarPlano(Plano plano) {
		saveOrUpdatePojo(plano);
		return plano.getPlanoId();
	}
	
	public void removerPlano(Plano plano) {
		removerPojo(plano);
	}

	/* Precisa definir o ID */
	public void atualizarPlano(Plano recupera) {
		saveOrUpdatePojo(recupera);
	}
	
	/**
	 * Editar um Plano
	 * @param String oldPlano
	 * @param String newPlano
	 */
	public void atualizarPlano(String oldPlano, String newPlano ) {
		if ( ( !"".equals(oldPlano) && oldPlano != null )
			&& ( !"".equals(newPlano) && newPlano != null ) ) 
			atualizarPlano( getPlanoQNamed(oldPlano), new Plano(newPlano) );
	}
	
	/* Precisa definir qual atribuito sera a chave a identificar 
	 * a tupla a ser alterada */
	public void atualizarPlano(Plano recuperar, Plano alterar) {
		recuperar = retrivePlano(recuperar);
		
		if(alterar.getPlano() != null)
			recuperar.setPlano(alterar.getPlano());
		if(alterar.getPlanoDescricao() != null)
			recuperar.setPlanoDescricao(alterar.getPlanoDescricao());
		if(alterar.getPeriodo()!= null)
			recuperar.setPeriodo(alterar.getPeriodo());
		if(alterar.getValor() != 0.0 )
			recuperar.setValor(alterar.getValor());
		if(alterar.getQtdAnuncio() != 0 )
			recuperar.setQtdAnuncio(alterar.getQtdAnuncio());
		
		saveOrUpdatePojo(recuperar);
	}
	
//	Artificio para Recuperar a Tupla de Plano
	protected Plano retrivePlano(Plano recuperar) {
		if(recuperar.getPlanoId() != null) 
			return getPlano(recuperar.getPlanoId());
		if(recuperar.getPlano() != null) 
			return getPlanoQNamed(recuperar.getPlano());
		if(recuperar.getPlanoDescricao() != null) 
			return getPlanoQNamedDesc(recuperar.getPlanoDescricao());
		if(recuperar.getPeriodo() == null)
			return getPlanoQNamedPeriodo(recuperar.getPeriodo());
		
		return recuperar;
	}
	
	
//	Consultas
	public Plano getPlano(Integer key) {
		return getPojoByID(Plano.class, key);
	}
	public Plano getPlanoByQuery(String query, Object...params) {
		return getPojoByQry(query, params);
	}
	public Plano getPlanoQNamed(String fltrPlano) {
		return getPojoByQNamed("Plano.findByPlano", fltrPlano);
	}
	public Plano getPlanoQNamedDesc(String fltrDesc) {
		return getPojoByQNamed("Plano.findByPlanoDescricao", fltrDesc);
	}
	public Plano getPlanoQNamedPeriodo(String fltrPeriodo) {
		return getPojoByQNamed("Plano.findByPeriodo", fltrPeriodo);
	}
	
//	Listas
	public List<Plano> getPlanos() {
		return (List<Plano>) getALL(Plano.class);
	}
	public List<Plano> getPlanosQNamedPRX(String fltrPlano) {
		return getListByQNamedPRX("Plano.findLikeByPlano", fltrPlano);
	}
	public List<Plano> getPlanosQNamedDescPRX(String fltrDesc) {
		return getListByQNamedPRX("Plano.findLikeByPlanoDescricao", fltrDesc);
	}
	public List<Plano> getPlanosQNamedPeriodoPRX(String fltrPeriodo) {
		return getListByQNamedPRX("Plano.findLikeByPeriodo", fltrPeriodo);
	}
	public List<Plano> getPlanoQNamedValor(Double fltrValor) {
		return getListByQNamed("Plano.findByValor", fltrValor);
	}
	public List<Plano> getPlanoQNamedQtdAnuncio(Integer fltrQtdAnuncio) {
		return getListByQNamed("Plano.findByQtdAnuncio", fltrQtdAnuncio);
	}
	
	public List<Plano> getPlanosByQuery(String query, Object...params) {
		return getListByQry(query, params);
	}
	
}